﻿using System.Windows;
using System.Windows.Controls;
using System.Collections.Generic;

namespace Ops.Mpc.ValidationServices
{
    public class ValidationService
    {
        #region Fields & Properties

        // Using a DependencyProperty as the backing store for Errors.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ErrorsProperty =
            DependencyProperty.RegisterAttached("Errors", typeof(IList<ValidationError>), typeof(ValidationService), new PropertyMetadata(null, ErrorsChanged));
        #endregion

        #region Methods

        public static IList<ValidationError> GetErrors(DependencyObject obj)
        {
            return (IList<ValidationError>)obj.GetValue(ErrorsProperty);
        }

        public static void SetErrors(DependencyObject obj, IList<ValidationError> value)
        {
            obj.SetValue(ErrorsProperty, value);
        }

        public static void ErrorsChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
        {
            FrameworkElement element = (FrameworkElement)obj;
            element.BindingValidationError += delegate(object sender, ValidationErrorEventArgs e)
            {
                if (e.Action == ValidationErrorEventAction.Added)
                {
                    GetErrors(obj).Add(e.Error);
                }
                else
                {
                    GetErrors(obj).Remove(e.Error);
                }
            };
        }
        #endregion
    }
}
